{
  "components": {
    "examples": {},
    "headers": {},
    "parameters": {},
    "requestBodies": {},
    "responses": {},
    "schemas": {
      "TestAllOfDc": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/FooBarBaz"
          },
          {
            "$ref": "#/components/schemas/FooBar"
          }
        ],
        "properties": {
          "prop": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "TestAllOfDc2": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/FooBarBaz"
          }
        ],
        "properties": {
          "prop": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "TestAnyOfDc": {
        "type": "object",
        "anyOf": [
          {
            "$ref": "#/components/schemas/FooBarBaz"
          },
          {
            "$ref": "#/components/schemas/FooBar"
          }
        ],
        "properties": {
          "prop": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "TestOneOfDc": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/FooBarBaz"
          },
          {
            "$ref": "#/components/schemas/FooBar"
          }
        ],
        "properties": {
          "prop": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "IntEnumWithNames": {
        "enum": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
        "type": "integer",
        "description": "FooBar",
        "format": "int32",
        "x-enumNames": [
          "Unknown",
          "String",
          "Int32",
          "Int64",
          "Double",
          "DateTime",
          "Test2",
          "Test23",
          "Tess44",
          "BooFar"
        ]
      },
      "NullableEnum": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "legalCategory": {
            "type": "string",
            "nullable": true,
            "enum": ["SARL", "ASSOCIATION"]
          }
        }
      },
      "FooBarBaz": {
        "description": "Information about job",
        "properties": {
          "id": { "type": "string" },
          "kind": { "$ref": "#/components/schemas/JobKind" },
          "name": { "type": "string" },
          "link": { "type": "string" }
        },
        "type": "object",
        "additionalProperties": true
      },
      "FooBar": {
        "description": "Information about job",
        "properties": {
          "kind": { "$ref": "#/components/schemas/JobKind" }
        },
        "type": "object"
      },
      "FooBaz": {
        "description": "Information about job",
        "properties": {
          "name": { "type": "string" },
          "link": { "type": "string" }
        },
        "type": "object"
      },
      "Pick_UserType.Exclude_keyofUserType.id-or-_id__": {
        "properties": { "username": { "type": "string" }, "password": { "type": "string" } },
        "required": ["username", "password"],
        "type": "object",
        "description": "From T, pick a set of properties whose keys are in the union K"
      },
      "Omit_UserType.id-or-_id_": {
        "$ref": "#/components/schemas/Pick_UserType.Exclude_keyofUserType.id-or-_id__"
      },
      "OmitId_UserType_": { "$ref": "#/components/schemas/Omit_UserType.id-or-_id_" },
      "AuthUserType": { "$ref": "#/components/schemas/OmitId_UserType_" },
      "JobKind": { "enum": ["COMPANY", "PERSONAL", "FREELANCE", "OPEN_SOURCE"], "type": "string" },
      "JobType": {
        "description": "Information about job",
        "properties": {
          "id": { "type": "string" },
          "kind": { "$ref": "#/components/schemas/JobKind" },
          "name": { "type": "string" },
          "link": { "type": "string" },
          "github": {
            "type": "string",
            "description": "Exist only in open source jobs\nFormat: `${username}/${projectName}`"
          },
          "npm": {
            "type": "string",
            "description": "Exist only in open source jobs\nFormat: `${orgname}/${projectName}`"
          },
          "isTool": {
            "type": "boolean",
            "description": "Exist only in open source jobs\nMeans project is dev. tool (like swagger code generator)"
          },
          "address": { "type": "string", "description": "web site address" }
        },
        "required": ["id", "kind"],
        "type": "object",
        "additionalProperties": false
      },
      "Pick_JobType.Exclude_keyofJobType.id-or-_id__": {
        "properties": {
          "kind": { "$ref": "#/components/schemas/JobKind" },
          "name": { "type": "string" },
          "link": { "type": "string" },
          "github": {
            "type": "string",
            "description": "Exist only in open source jobs\nFormat: `${username}/${projectName}`"
          },
          "npm": {
            "type": "string",
            "description": "Exist only in open source jobs\nFormat: `${orgname}/${projectName}`"
          },
          "isTool": {
            "type": "boolean",
            "description": "Exist only in open source jobs\nMeans project is dev. tool (like swagger code generator)"
          },
          "address": { "type": "string", "description": "web site address" }
        },
        "required": ["kind"],
        "type": "object",
        "description": "From T, pick a set of properties whose keys are in the union K"
      },
      "Omit_JobType.id-or-_id_": {
        "$ref": "#/components/schemas/Pick_JobType.Exclude_keyofJobType.id-or-_id__"
      },
      "OmitId_JobType_": { "$ref": "#/components/schemas/Omit_JobType.id-or-_id_" },
      "JobUpdateType": { "$ref": "#/components/schemas/OmitId_JobType_" },
      "Pick_ProjectType.Exclude_keyofProjectType.job__": {
        "properties": {
          "id": { "type": "string" },
          "name": { "type": "string" },
          "year": { "type": "number", "format": "double" },
          "description": { "type": "string" },
          "notImportant": { "type": "boolean" },
          "prefix": { "type": "string" },
          "tags": { "items": { "type": "string" }, "type": "array" },
          "teamSize": { "type": "string" }
        },
        "required": ["id", "year", "description", "tags", "teamSize"],
        "type": "object",
        "description": "From T, pick a set of properties whose keys are in the union K"
      },
      "Omit_ProjectType.job_": {
        "$ref": "#/components/schemas/Pick_ProjectType.Exclude_keyofProjectType.job__"
      },
      "ExtractedProjectType": {
        "allOf": [
          { "$ref": "#/components/schemas/Omit_ProjectType.job_" },
          {
            "properties": { "job": { "$ref": "#/components/schemas/JobType" } },
            "required": ["job"],
            "type": "object"
          }
        ]
      },
      "Pick_ProjectType.Exclude_keyofProjectType.id-or-_id__": {
        "properties": {
          "name": { "type": "string" },
          "job": { "type": "string" },
          "year": { "type": "number", "format": "double" },
          "description": { "type": "string" },
          "notImportant": { "type": "boolean" },
          "prefix": { "type": "string" },
          "tags": { "items": { "type": "string" }, "type": "array" },
          "teamSize": { "type": "string" }
        },
        "required": ["job", "year", "description", "tags", "teamSize"],
        "type": "object",
        "description": "From T, pick a set of properties whose keys are in the union K"
      },
      "Omit_ProjectType.id-or-_id_": {
        "$ref": "#/components/schemas/Pick_ProjectType.Exclude_keyofProjectType.id-or-_id__"
      },
      "OmitId_ProjectType_": { "$ref": "#/components/schemas/Omit_ProjectType.id-or-_id_" },
      "ProjectUpdateType": { "$ref": "#/components/schemas/OmitId_ProjectType_" },
      "ProjectType": {
        "properties": {
          "id": { "type": "string" },
          "year": { "type": "number", "format": "double" },
          "description": { "type": "string" },
          "job": { "type": "string" },
          "name": { "type": "string" },
          "notImportant": { "type": "boolean" },
          "prefix": { "type": "string" },
          "tags": { "items": { "type": "string" }, "type": "array" },
          "teamSize": { "type": "string" }
        },
        "required": ["id", "year", "description", "job", "tags", "teamSize"],
        "type": "object",
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "JWT": { "description": "", "type": "apiKey", "name": "Authorization", "in": "header" }
    }
  },
  "info": { "title": "" },
  "openapi": "3.0.0",
  "paths": {
    "/auth": {
      "post": {
        "operationId": "Login",
        "responses": {
          "200": {
            "content": { "application/json": { "schema": { "type": "string" } } },
            "description": "Authorize and returns jwt token"
          }
        },
        "tags": ["Auth"],
        "security": [],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/AuthUserType" } }
          }
        }
      }
    },
    "/auth/refresh": {
      "post": {
        "operationId": "Refresh",
        "responses": {
          "200": {
            "content": { "application/json": { "schema": { "type": "string" } } },
            "description": "utilized current token and returns new token"
          }
        },
        "tags": ["Auth"],
        "security": [{ "jwt": [] }],
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": true,
            "schema": { "type": "string" }
          }
        ]
      }
    },
    "/jobs": {
      "get": {
        "operationId": "GetJobs",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": { "items": { "$ref": "#/components/schemas/JobType" }, "type": "array" }
              }
            },
            "description": "jobs found"
          }
        },
        "tags": ["Jobs"],
        "security": [{ "jwt": [] }],
        "parameters": []
      },
      "post": {
        "operationId": "AddJob",
        "responses": {
          "200": {
            "content": { "application/json": { "schema": { "type": "string" } } },
            "description": "Ok"
          }
        },
        "tags": ["Jobs"],
        "security": [{ "jwt": [] }],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/JobUpdateType" } }
          }
        }
      }
    },
    "/jobs/{id}": {
      "get": {
        "operationId": "GetJob",
        "responses": {
          "200": {
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/JobType" } }
            },
            "description": "job found"
          },
          "404": { "content": { "application/json": {} }, "description": "job not found" }
        },
        "tags": ["Jobs"],
        "security": [{ "jwt": [] }],
        "parameters": [
          { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }
        ]
      },
      "patch": {
        "operationId": "UpdateJob",
        "responses": {
          "200": {
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/JobType" } }
            },
            "description": "Ok"
          }
        },
        "tags": ["Jobs"],
        "security": [{ "jwt": [] }],
        "parameters": [
          { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }
        ],
        "requestBody": {
          "required": true,
          "name": "params",
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/JobUpdateType" } }
          }
        }
      },
      "delete": {
        "operationId": "DeleteJob",
        "responses": {
          "204": { "content": { "application/json": {} }, "description": "No content" }
        },
        "tags": ["Jobs"],
        "security": [{ "jwt": [] }],
        "parameters": [
          { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }
        ]
      }
    },
    "/projects": {
      "get": {
        "operationId": "GetProjects",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": { "$ref": "#/components/schemas/ExtractedProjectType" },
                  "type": "array"
                }
              }
            },
            "description": "Ok"
          }
        },
        "tags": ["Projects"],
        "security": [],
        "parameters": []
      },
      "post": {
        "operationId": "AddProjects",
        "responses": {
          "200": {
            "content": { "application/json": { "schema": { "type": "string" } } },
            "description": "Ok"
          }
        },
        "tags": ["Projects"],
        "security": [{ "jwt": [] }],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/ProjectUpdateType" } }
          }
        }
      }
    },
    "/projects/{id}": {
      "patch": {
        "operationId": "UpdateProject",
        "responses": {
          "200": {
            "content": {
              "application/json": { "schema": { "$ref": "#/components/schemas/ProjectType" } }
            },
            "description": "Ok"
          }
        },
        "tags": ["Projects"],
        "security": [{ "jwt": [] }],
        "parameters": [
          { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": { "schema": { "$ref": "#/components/schemas/ProjectUpdateType" } }
          }
        }
      },
      "delete": {
        "operationId": "DeleteProject",
        "responses": {
          "204": { "content": { "application/json": {} }, "description": "No content" }
        },
        "tags": ["Projects"],
        "security": [],
        "parameters": [
          { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }
        ]
      }
    }
  },
  "servers": [{ "url": "http://localhost:8080/api/v1" }]
}
